找回密码
 立即注册
收起左侧

按钮样式表如何同时改变?

7
回复
7488
查看
[复制链接]
累计签到:31 天
连续签到:1 天
来源: 2018-9-13 17:30:56 显示全部楼层 |阅读模式
5Qter豆
我在H文件里声明了一个按钮
private:
QPushButton *NLight1;

并把它加载到了三个页面,并且成功显示
NLight1 = new QPushButton(ui->page1);
NLight1 = new QPushButton(ui->page2);
NLight1 = new QPushButton(ui->page3);

当我更改了样式表
NLight1->setStyleSheet(
                    "QPushButton{"
                    "border-image:url(:/image/Light/imglampred3.png);"
                    "border-styleutset;"                  //边框样式(inset/outset)
                    "}");

样式表只会应用到最后一个NLight1,也就是page3的NLight1

这种使用方法应该是不符合程序规则的,理论上我应该建立3个按钮,但我现在使用的按钮太多(重点),并且需要它们同时改变图片,如例:

page1->NLight1->换图
          |(同时换图)
page2->NLight1->换图
          |(同时换图)
page3->NLight1->换图


我应该怎么写?有大概流程即可。

最佳答案

查看完整内容

这种编码方式不会导致内存泄漏,因为每个Button都设置了父,在父Widget析构时会自动析构子。
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-9-13 17:30:57 显示全部楼层
shasidaran 发表于 2018-9-14 09:17
首先你用使用下面的方法当然是有问题了,要不是Qt有自己的内存管理机制,你这么写,内存要被你吃完。
一个n ...

这种编码方式不会导致内存泄漏,因为每个Button都设置了父,在父Widget析构时会自动析构子。
回复

使用道具 举报

累计签到:597 天
连续签到:1 天
2018-9-14 09:17:58 显示全部楼层
首先你用使用下面的方法当然是有问题了,要不是Qt有自己的内存管理机制,你这么写,内存要被你吃完。
一个new要对应一个delete,你还要多学学C++基础
  1. NLight1 = new QPushButton(ui->page1);
  2. NLight1 = new QPushButton(ui->page2);
  3. NLight1 = new QPushButton(ui->page3);
复制代码


回到你的问题,同时改变多个按钮的样式,这个方法有很多,说个最简单的,就是把按钮样式写在.qss文件中,
程序加载样式文件。样式文件里一次定义button的样式即可。
当然其实细数还有很多种方法。。。
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2018-9-17 08:26:04 显示全部楼层
shasidaran 发表于 2018-9-14 09:17
首先你用使用下面的方法当然是有问题了,要不是Qt有自己的内存管理机制,你这么写,内存要被你吃完。
一个n ...

可能我没说清楚,不是我要按钮统一样式表,而是我需要执行一个统一变换按钮图片的程序,每个按钮的图片随着我程序的改变而改变。改变图片在一个页面中简单,但我A页面的按钮更换了图片,我需要B页面的按钮也更换图片。如果定义了两个不同的按钮自然也没什么问题。但我现在不同页面的按钮共用一个QPushButton *NLight1指针,指针的地址肯定是最后一个加载的按钮,如果最后加载的按钮在C页面,也就是说我没办法改变A和B页面按钮的样式表,我想问的是有没有什么好方法,在不增添申明按钮数量的同时,能做到统一改变图片。


回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-9-17 15:54:41 显示全部楼层
这个不行吗?
QApplication::setStyleSheet
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2018-9-18 08:41:39 显示全部楼层
miroox 发表于 2018-9-17 15:54
这个不行吗?
QApplication::setStyleSheet

其实主要的问题是按钮没有指针指向对应的地址,A和B页面设置了按钮,然后C面也设置了按钮,*NLight1的地址就是指向最后设置的C,A和B就没有指针指向了,自然也没办法更改AB的样式表(也可能有办法,但我没想出来),最后我直接用笨办法,给每个按钮都分配了各自的指针,这样就没有上面的问题了,只是重复代码又多了几千行,看上去杂乱烦人逼死强迫症而已。

点评

为什么重复代码会又多了几千行  详情 回复 发表于 2018-9-18 09:50
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-9-18 09:50:30 显示全部楼层
huoyl 发表于 2018-9-18 08:41
其实主要的问题是按钮没有指针指向对应的地址,A和B页面设置了按钮,然后C面也设置了按钮,*NLight1的地 ...

为什么重复代码会又多了几千行
回复

使用道具 举报

累计签到:31 天
连续签到:1 天
2018-9-18 17:05:18 显示全部楼层
miroox 发表于 2018-9-18 09:50
为什么重复代码会又多了几千行

按钮应用的图片一样,但是分为了按钮A和B,对于A来说,B的样式表不就是重复代码吗?
page1->A按钮
page2->B按钮

比如说我按一个按钮,每按要给A换一次图片,B也要同时换一次图片,C对应的D是同一张图片,而A和C图片不同,所以我又需要区分按钮,不能统一样式表。

哎,总之很烦就是了。不过解决了,懒得操心这个问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了