QT点击任意控件弹出新窗口修改当前控件属性
时间: 2023-10-27 14:06:13 浏览: 46
实现这个功能需要以下步骤:
1. 在Qt中创建一个新窗口类,例如NewWindow,用于修改当前控件属性。
2. 在当前控件的槽函数中,创建NewWindow实例并调用show()方法显示窗口。
3. 在NewWindow类中,添加需要修改的控件属性以及相应的控件。
4. 在NewWindow中添加确定和取消按钮,并为其添加相应的槽函数,当点击确定按钮时,将新的属性值传递给当前控件并关闭NewWindow。
以下是一个简单的实现示例:
在当前控件的槽函数中添加以下代码:
```cpp
void MainWindow::on_pushButton_clicked()
{
NewWindow *newWindow = new NewWindow(this);
newWindow->setAttribute(Qt::WA_DeleteOnClose);
connect(newWindow, &NewWindow::propertyChanged, this, &MainWindow::onPropertyChanged);
newWindow->show();
}
```
在NewWindow类中添加需要修改的控件属性以及相应的控件,例如:
```cpp
class NewWindow : public QDialog
{
Q_OBJECT
public:
explicit NewWindow(QWidget *parent = nullptr);
~NewWindow();
signals:
void propertyChanged(QString propertyName, QVariant propertyValue);
private slots:
void onOkButtonClicked();
void onCancelButtonClicked();
private:
QLineEdit *lineEdit;
QPushButton *okButton;
QPushButton *cancelButton;
};
```
在NewWindow中添加确定和取消按钮,并为其添加相应的槽函数,例如:
```cpp
NewWindow::NewWindow(QWidget *parent) :
QDialog(parent)
{
lineEdit = new QLineEdit(this);
okButton = new QPushButton(tr("确定"), this);
connect(okButton, &QPushButton::clicked, this, &NewWindow::onOkButtonClicked);
cancelButton = new QPushButton(tr("取消"), this);
connect(cancelButton, &QPushButton::clicked, this, &NewWindow::onCancelButtonClicked);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(lineEdit);
layout->addWidget(okButton);
layout->addWidget(cancelButton);
}
void NewWindow::onOkButtonClicked()
{
QString propertyName = "text";
QVariant propertyValue = lineEdit->text();
emit propertyChanged(propertyName, propertyValue);
close();
}
void NewWindow::onCancelButtonClicked()
{
close();
}
NewWindow::~NewWindow()
{
delete lineEdit;
delete okButton;
delete cancelButton;
}
```
在MainWindow类中添加onPropertyChanged槽函数,用于接收从NewWindow传递过来的属性值并设置到当前控件中,例如:
```cpp
void MainWindow::onPropertyChanged(QString propertyName, QVariant propertyValue)
{
ui->pushButton->setProperty(propertyName.toStdString().c_str(), propertyValue);
}
```