【发布时间】:2013-10-20 00:15:01
【问题描述】:
这不起作用:
void MainWindow::on_left_win_clicked()
{
Dialog *dialog1 = new Dialog(this);
dialog1->show();
return;
}
但是这样做:
void MainWindow::on_left_win_clicked()
{
QDialog *dialog1 = new QDialog(this);
dialog1->show();
return;
}
我只是使用了标准的 Qt Designer Form Class -> Dialog with Buttons Bottom
编辑:添加了 dialog.h 和 dialog.cpp
dialog.h 这只是标准的 dialog.h 没有在设计器窗口中为我创建的更改。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
对话框.cpp。我在这里添加的唯一部分是基于另一个线程中的建议的 setWindowFlags(没有帮助)。
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::Dialog)
{
ui->setupUi(this);
setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::Dialog);
}
Dialog::~Dialog()
{
delete ui;
}
【问题讨论】:
-
可能是布局问题?你的对话框有顶级布局吗? dialog1->sizeHint() 返回什么?
-
这是我编译时得到的。 (只有对话)
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl Dialog::Dialog(class QWidget *)" (??0Dialog@@QEAA@PEAVQWidget@@@Z) referenced in function "private: void __cdecl MainWindow::on_left_win_clicked(void)" (?on_left_win_clicked@MainWindow@@AEAAXXZ) -
这是我使用 QDialog 时发生的情况。它会运行,但是当我尝试生成对话框时,会弹出一个小方框。
QWindowsWindow::setGeometry: Unable to set geometry 100x30+749+414 on 'QDialogClassWindow'. Resulting geometry: 116x30+749+414 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). -
您显然没有编译/链接您的 Dialog::Dialog(QWidget*) 实现(通常是 dialog.cpp 或类似的)。这让我想知道代码是否曾经编译过?
-
也许你改变了
Dialogs 头文件中的某些内容,所以cpp 不匹配?
标签: c++ qt qmainwindow qdialog qtgui