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

关于Button样式的几个问题

6
回复
9348
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2015-10-19 09:13:22 显示全部楼层 |阅读模式
1Qter豆
刚开始做Qt诸多小问题神烦,还望大家不吝赐教
1、想要使用PushButton实现setCheckable状态(点击一次保持按下,再点击一次保持弹起)
     PushButton.setCheckable(true);//实现了该功能
     问题来了:我怎么能在程序中读取当前的状态是按下还是弹起呢?
2、我的按键弹起和按下分别需要贴两张图片,所以用到了Stylesheet代码如下
    this->setStyleSheet("QPushButton:pressed{border-image:url(:/CloseButton_Press.png);}"
                                         "QPushButton{border-image:url(:/CloseButton_Release.png);}");
    实现了两个图片的显示,但是
    问题来了:①使用setStyleSheet后setCheckable的状态又变回了点击按下放开鼠标弹起的状态,我要怎样才能实现问题1中的功能呢?
                      ②使用setStyleSheet后点击按钮,按钮上出现了一层蒙版,把按钮的一部分遮住了。我试着去掉图片使用背景色则没有这个问题如下图

图1为按下√后,√按键上出现了透明的罩子,     图二为按下”减号“后,”减号“按键上出现了透明的罩子。

3个问题困扰我两天了,,,,求好心的大神们为我解答!!




附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

可以使用ui->pushButton->isChecked();来判断是否被选中。 QPushButton:pressed修改为QPushButton:checked即可实现选中状态更换图片。 你说的阴影,现在不是很明显了,你用什么系统,什么版本的Qt啊?试试 ui->pushButton->setFocusPolicy(Qt::NoFocus);
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-10-19 09:13:23 显示全部楼层
可以使用ui->pushButton->isChecked();来判断是否被选中。

QPushButton:pressed修改为QPushButton:checked即可实现选中状态更换图片。

你说的阴影,现在不是很明显了,你用什么系统,什么版本的Qt啊?试试
ui->pushButton->setFocusPolicy(Qt::NoFocus);
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-10-19 15:07:01 显示全部楼层
在线等大神啊~!!关于问题2中②应该是按键获得焦点后tab的样式,参见http://liufiabo.blog.163.com/blo ... 832009916114443120/
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-10-19 21:02:55 显示全部楼层
yafeilinux 发表于 2015-10-19 20:21
可以使用ui->pushButton->isChecked();来判断是否被选中。

QPushButton:pressed修改为QPushButton:checked ...

多谢啦!不过我是需要焦点移动的,因为以后要用到键盘控制按钮的选择。所以还是想尽可能用stylesheet,也能便于以后的换肤
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-10-19 21:05:48 显示全部楼层
或者说如果不能隐藏阴影,那么可以修改阴影的样式或者自定义阴影么?需要修改什么选项呢?
回复

使用道具 举报

累计签到:32 天
连续签到:1 天
2015-10-19 23:34:23 显示全部楼层
自己自定个按钮类,想怎么折腾就怎么折腾
下面是我定义的一个类:
  1. class PushButton : public QWidget
  2. {
  3.     Q_OBJECT

  4. public:
  5.     PushButton(QWidget *parent = 0);
  6.     virtual ~PushButton();
  7.     void setText(QString str);
  8.     QString getText();

  9.     void setFocusPic(QString str);
  10.     void setUnFocusPic(QString str);
  11.     void setFontSize(int size);

  12. protected:
  13.     PushButton(const PushButton&);
  14.     PushButton & operator=(const PushButton&);

  15.     virtual void paintEvent(QPaintEvent*);

  16. private:
  17.     QString m_focuspic;
  18.     QString m_unfocuspic;
  19.     QString m_text;
  20.     int m_fontsize;
  21. };
复制代码
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-10-20 17:32:23 显示全部楼层
felix 发表于 2015-10-19 23:34
自己自定个按钮类,想怎么折腾就怎么折腾
下面是我定义的一个类:

自己确实做了一个可以调节参数的按钮,能够实现按下和弹起切换图片。感觉有成熟的控件还是希望能够有限使用,毕竟方便嘛。如果没有别的办法也只能这样了
class Button_Control : public QWidget
{
    Q_OBJECT

public:
    typedef enum {ButtonRelease , ButtonPressed , ButtonFocus}BUTTON_STATE_E;
    typedef enum {ButtonInactive , ButtonActive}BUTTON_ACTIVESTATE_E;
    typedef enum {ButtonStyle_Default,ButtonStyle_IERatio,ButtonStyle_FGFlow,ButtonStyle_Mode}BUTTON_STYLE_E;
    explicit Button_Control(QWidget *parent=0);

    Button_Control(QWidget *parent,QString Name,
                   BUTTON_STATE_E State = ButtonRelease,
                   BUTTON_ACTIVESTATE_E ActiveState = ButtonInactive,
                   BUTTON_STYLE_E Style = ButtonStyle_Default);

    Button_Control(QWidget *parent,QString Name,QString Unit,
                            qint32 Value,
                            qint16 Step,
                            qint8  Float,
                            qint32 Max,
                            qint32 Min,
                            BUTTON_STATE_E State = ButtonRelease,
                            BUTTON_ACTIVESTATE_E ActiveState = ButtonInactive,
                            BUTTON_STYLE_E Style = ButtonStyle_Default);

    ~Button_Control();

    //state
    void   ButtonSet_Release(void);
    void   ButtonSet_Pressed(void);
    BUTTON_STATE_E  ButtonSet_StateReverse(void);//reverse state
    BUTTON_STATE_E  ButtonGet_State(void);


    //display
    void   ButtonSet_ParaName(QString ParaName);
    QString * ButtonGet_ParaName(void);

    void   ButtonSet_ParaUnit(QString ParaUnit);
    QString * ButtonGet_ParaUnit(void);

    void   ButtonSet_ParaValue(qint32 ParaValue);
    qint32 ButtonGet_ParaValue(void);


    qint32 ButtonAdd_ParaValue(void);
    qint32 ButtonSub_ParaValue(void);

    void   ButtonSet_FloatNum(qint8 FloatNum);
    qint8  ButtonGet_FloatNum(void);

    //contron
    void   ButtonSet_StepNum(qint32 StepNum);
    qint32 ButtonGet_StepNum(void);

    //limit
    void   ButtonSet_MaxMinValue(qint32 Max,qint32 Min);
    qint32 ButtonGet_MaxValue(void);
    qint32 ButtonGet_MinValue(void);

    //process
    QString * _IntToFloat(qint32 num,qint8 FloatNum); //maybe error: new String not delete
signals:
    void ButtonPress_Event(Button_Control *src);//end self press signal
protected:
    void paintEvent(QPaintEvent * event);
    void keyPressEvent(QKeyEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);


private:
    Ui::Button_Control *ui;
    const qint8 ItemID = 1;// button ItemID = 8
    //state
    BUTTON_STATE_E         Button_State;
    BUTTON_ACTIVESTATE_E   Button_ActiveState;
    BUTTON_STYLE_E         Button_Style;
    //display
    QString Button_ParaName;
    QString Button_ParaUnit;
    qint32  Button_ParaValue;
    qint8   Button_FloatNum;

    //QFont Button_NameFont
    //      Button_ValueFont
    //      Button_ColorTable[6]   //NameFontColor_Active
                                   //ValueFontColor_Active
                                   //NameFontColor_Inactive
                                   //ValueFontColor_Inactive
                                   //NameFontColor_Focus
                                   //ValueFontColor_Focus
    QString Button_ImageName[3];    //BUTTON_STATE_E 3 state

    //control
    qint16  Button_StepNum;
    //limit
    qint32  Button_MaxValue;
    qint32  Button_MinValue;
};
回复

使用道具 举报

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

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