介绍
自定义框主要通过对现有对话框QDialog类的派生,根据需求编写成员函数、重载信号函数、槽函数,进而实现在主QWidget中点击某个按钮后,一个对话框的弹出
流程
简化创建派生类
最后点击完成即可。
自定义ui界面,编写成员函数等
class TMyDialog;
}
class TMyDialog : public QDialog
{
Q_OBJECT
public:
explicit TMyDialog(QWidget *parent = nullptr);
~TMyDialog();
void setRowCol(int row, int col);
int rowCount();
int colCount();
private slots:
void on_btnEnsure_clicked();
void on_btnCancel_clicked();
private:
Ui::TMyDialog *ui;
};
#include "tmydialog.h"
#include "ui_tmydialog.h"
TMyDialog::TMyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::TMyDialog)
{
ui->setupUi(this);
}
TMyDialog::~TMyDialog()
{
delete ui;
}
void TMyDialog::setRowCol(int row, int col)
{
ui->spinBoxRow->setValue(row);
ui->spinBoxCol->setValue(col);
}
int TMyDialog::rowCount()
{
return ui->spinBoxRow->value();
}
int TMyDialog::colCount()
{
return ui->spinBoxCol->value();
}
void TMyDialog::on_btnEnsure_clicked()
{
this->accept();
}
void TMyDialog::on_btnCancel_clicked()
{
this->reject();
}
主窗口触发槽函数编写
这里常有一个固定的格式
-
new一个自定义对话框类对象(根据需求确定是在槽函数内new还是在外面new)
-
根据需求编写功能(组件显示数值初始化等)
-
获取对话框执行结果(int ret = dialog->exec()),根据执行结果编写后续功能
void MainWindow::on_actSetRowCol_triggered()
{
TMyDialog *m_dialog = new TMyDialog();
m_dialog->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint);
m_dialog->setRowCol(m_model->rowCount(), m_model->columnCount()); //这里只是初始化对话框中的spinbox的值
int ret = m_dialog->exec(); //循环执行获取结果
if(ret == QDialog::Accepted)
{
m_model->setColumnCount(m_dialog->colCount());
m_model->setRowCount(m_dialog->rowCount());
}
delete m_dialog;
}