c++ - 如何在 Qt 中制作一个在运行时同时打开 2 个窗口的程序?
问题描述
最初我是在我之前制作的主窗口中制作的
解决方案
用主窗口打开第二个窗口(或对话框)并不复杂。
为了证明这一点,我制作了一个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 上构建和运行:
一个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
我仍然认为 OP 的代码中一定还有其他问题。
推荐阅读
- solidity - 当我尝试在 vscode 中导入 Openzeppelin 合同时出现 ParserError
- python - Python boto3 (AWS EC2) 列出嵌套 JSON 数据
- excel - Excel匹配多个标准不起作用
- .htaccess - 多次使用 .htaccess 将网站 URL 从 example.com/post.php?slug=test 更改为 example.com/post/test
- python - PySAT 是否支持并行求解?
- visual-studio-code - 在 Visual Studio Code ( VS Code ) 中,有没有办法在同一个文档中添加不同颜色的注释?(即针对不同的主题|人)
- r - 错误:包“TStools”的延迟加载失败
- reactjs - Heroku:为什么在 React 应用程序部署后我会收到 H10 错误?
- python - 如何实现 python 代码作为 Azure 函数工作?
- java - 使用多个 JPanel 类时如何在 JFrame 中打开另一个 JPanel