C++跨页面修改qpushbutton图标
时间: 2023-11-14 14:04:37 浏览: 120
要在另一个页面中修改QPushButton的图标,需要在该页面中创建一个指向QPushButton的指针,并使用setStyleSheet()函数来设置按钮的样式表,从而更改按钮的图标。
以下是一个示例代码,在MainWindow中创建一个QPushButton,在另一个页面中更改该按钮的图标:
MainWindow.h文件中:
```
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QPushButton *m_button; // 指向QPushButton的指针
};
```
MainWindow.cpp文件中:
```
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_button = new QPushButton("Click me", this); // 创建QPushButton对象
m_button->setGeometry(10, 10, 100, 50); // 设置按钮位置和大小
}
void MainWindow::on_pushButton_clicked()
{
SecondPage secondPage(m_button); // 将QPushButton指针传递给第二个页面
secondPage.exec(); // 打开第二个页面
}
```
SecondPage.h文件中:
```
class SecondPage : public QDialog
{
Q_OBJECT
public:
explicit SecondPage(QPushButton *button, QWidget *parent = 0);
~SecondPage();
private:
QPushButton *m_button; // 指向QPushButton的指针
};
```
SecondPage.cpp文件中:
```
SecondPage::SecondPage(QPushButton *button, QWidget *parent) :
QDialog(parent),
m_button(button) // 将QPushButton指针保存到成员变量中
{
QVBoxLayout *layout = new QVBoxLayout(this);
QPushButton *changeButton = new QPushButton("Change icon", this);
layout->addWidget(changeButton);
connect(changeButton, &QPushButton::clicked, [this]() {
m_button->setStyleSheet("QPushButton { border-image: url(:/new/image/image.png); }"); // 设置按钮的样式表,更改图标
});
}
SecondPage::~SecondPage()
{
delete ui;
}
```
在第二个页面中,使用QPushButton指针来设置按钮的样式表。在这个示例中,我们使用了一个lambda表达式来捕获m_button指针,并将其传递给setStyleSheet()函数。在这个函数中,我们使用border-image属性来设置按钮的背景图像。
这里假设有一个名为image.png的图像文件,它位于QMainWindow类的资源文件中,该文件夹可以使用以下代码添加到MainWindow.cpp文件中:
```
Q_INIT_RESOURCE(resource);
```
这个代码应该放在MainWindow.cpp文件的顶部,在MainWindow::MainWindow()函数的最开始处。这会将资源文件初始化并使资源文件中的图像文件可用于整个应用程序。
阅读全文