如何在Qt中制作一个运行时同时打开2个窗口的程序?

问题描述 投票:0回答:1

起初我是在我之前做的窗口的主

c++ qt user-interface qt5 qt-creator
1个回答
1
投票

没有什么复杂的,打开一个2nd 窗口(或对话框)与主窗口。

为了证明这一点,我做了一个 MCVE.

C++源码 testQMainWindowWithQDialog.cc:

// Qt header:
#include <QtWidgets>

class Dialog: public QDialog {
  private:
    QVBoxLayout _qVBox;
    QLabel _qLbl;

  public:
    Dialog(QWidget *pQParent = nullptr):
      QDialog(pQParent),
      _qLbl("the dialog")
    {
      setWindowTitle("the Dialog Window");
      _qVBox.addWidget(&_qLbl, 1, Qt::AlignCenter);
      setLayout(&_qVBox);
    }

    virtual ~Dialog() = default;

    Dialog(const Dialog&) = delete;
    Dialog& operator=(const Dialog&) = delete;
};

class MainWindow: public QMainWindow {
  private:
    Dialog _qDlg;
    QWidget _qWidgetCentral;
    QVBoxLayout _qVBox;
    QLabel _qLbl;

  public:
    MainWindow():
      QMainWindow(),
      _qDlg(this),
      _qLbl("the main window")
    {
      setWindowTitle("Test QMainWindow with QDialog");
      _qVBox.addWidget(&_qLbl, 1, Qt::AlignCenter);
      _qWidgetCentral.setLayout(&_qVBox);
      setCentralWidget(&_qWidgetCentral);
      _qDlg.show();
    }
};

// main application
int main(int argc, char **argv)
{
  qDebug() << "Qt Version:" << QT_VERSION_STR;
  QApplication app(argc, argv);
  // setup GUI
  MainWindow qWinMain;
  qWinMain.show();
  // runtime loop
  return app.exec();
}

构建脚本 CMakeLists.txt 为VS2017准备一个VS解决方案)。

project(QMainWindowWithQDialog)

cmake_minimum_required(VERSION 3.10.0)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

find_package(Qt5Widgets CONFIG REQUIRED)

include_directories("${CMAKE_SOURCE_DIR}")

add_executable(testQMainWindowWithQDialog testQMainWindowWithQDialog.cc)

target_link_libraries(testQMainWindowWithQDialog Qt5::Widgets)

在Windows 10、VS2017、Qt 5.13上构建并运行。

snapshot of testQMainWindowWithQDialog.exe (main window) snapshot of testQMainWindowWithQDialog.exe (dialog)

一个Qt项目文件 testQMainWindowWithQDialog.pro:

SOURCES = testQMainWindowWithQDialog.cc

QT += widgets

构建和测试: cygwin64 用X11服务器)。

$ qmake-qt5 testQMainWindowWithQDialog.pro 

$ make && ./testQMainWindowWithQDialog 
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQMainWindowWithQDialog.o testQMainWindowWithQDialog.cc
g++  -o testQMainWindowWithQDialog.exe testQMainWindowWithQDialog.o   -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread 
Qt Version: 5.9.4

snapshot of ./testQMainWindowWithQDialog (main window) snapshot of ./testQMainWindowWithQDialog (dialog)

我仍然认为,OP的代码中一定有其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.