Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTool按钮防止移动_Qt_Button_Qtoolbutton - Fatal编程技术网

QTool按钮防止移动

QTool按钮防止移动,qt,button,qtoolbutton,Qt,Button,Qtoolbutton,是否有方法防止单击时“按下”QToolButton?我在某个地方读到了那种背景 button->setCheckable(false); 我们应该这样做,但事实并非如此 添加到工具栏并使用它控制工具按钮 // button action QAction * poBtnAction = poToolbar->addWidget(button); // disable button poBtnAction->setEnabled(false); 添加到工具栏并使用它控制工具按钮

是否有方法防止单击时“按下”QToolButton?我在某个地方读到了那种背景

button->setCheckable(false);
我们应该这样做,但事实并非如此

添加到工具栏并使用它控制工具按钮

// button action
QAction * poBtnAction = poToolbar->addWidget(button);
// disable button
poBtnAction->setEnabled(false);
添加到工具栏并使用它控制工具按钮

// button action
QAction * poBtnAction = poToolbar->addWidget(button);
// disable button
poBtnAction->setEnabled(false);

有一种方法可以通过QProxyStyle实现:

class ButtonProxyStyle : public QProxyStyle
{
public:
    const int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) 
    {
        int ret = 0;
        switch (metric) 
        {
        case QStyle::PM_ButtonShiftHorizontal:
        case QStyle::PM_ButtonShiftVertical:
            ret = 0;
            break;
        default:
            ret = QProxyStyle::pixelMetric(metric, option, widget);
            break;
        }
        return ret;
    }
};
然后,按一下按钮:

myToolButton->setStyle(new ButtonProxyStyle);

有一种方法可以通过QProxyStyle实现:

class ButtonProxyStyle : public QProxyStyle
{
public:
    const int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) 
    {
        int ret = 0;
        switch (metric) 
        {
        case QStyle::PM_ButtonShiftHorizontal:
        case QStyle::PM_ButtonShiftVertical:
            ret = 0;
            break;
        default:
            ret = QProxyStyle::pixelMetric(metric, option, widget);
            break;
        }
        return ret;
    }
};
然后,按一下按钮:

myToolButton->setStyle(new ButtonProxyStyle);

谢谢你的回答,但我没有工具栏。我只有一个按钮。基本上,我正在做的是定制:。感谢您的回答,但我没有工具栏。我只有一个按钮。基本上,我正在做的是定制:。你应该画一个按钮。当它处于按下状态时,您应按正常方式绘制它。只需复制pase paint方法并修复它。或者使用QSS以与正常相同的方式绘制按下的按钮。您应该绘制一个按钮。当它处于按下状态时,您应按正常方式绘制它。只需复制pase paint方法并修复它。或使用QSS以正常方式绘制按下的按钮。谢谢!事实上,我试过这个解决方案,但没有成功,既然你建议了,我又试了一次,做了更多的调查。我想我遇到了一个问题,因为我还设置了
myToolButton->setStyleSheet(“QToolButton{border:none;color:#223f5a;}”)我认为这两种风格不适合。您是否知道如何将此样式表集成到
QProxyStyle
?您是对的:样式表和代理样式不能一起工作。如果你使用我的解决方案,你将不得不从头开始画你的按钮。也许对您来说,最好的解决方案是子类QAbstractButton并提供您想要的行为?谢谢!事实上,我试过这个解决方案,但没有成功,既然你建议了,我又试了一次,做了更多的调查。我想我遇到了一个问题,因为我还设置了
myToolButton->setStyleSheet(“QToolButton{border:none;color:#223f5a;}”)我认为这两种风格不适合。您是否知道如何将此样式表集成到
QProxyStyle
?您是对的:样式表和代理样式不能一起工作。如果你使用我的解决方案,你将不得不从头开始画你的按钮。也许对您来说最好的解决方案是将QabStretcButton子类化,并给出您想要的行为?