Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Небольшая проблемка с QDial

Автор: Andrewshkovskii 17.3.2009, 19:15

не знаю даже как охарактеризовать...В скриншоте 3 QDiala, и дело в том, что они реагируют на мышкку без фокуса на них. т.е : если кликать на прямоугольник с цветом - QDial изменит своё значение, будет "следить" за мышкой. Как можно это убрать?:)
Такой проблемы нет в превьюшка из дизайнера..а вот когда вручную я написал, такая бага. Ничего кроме размешения виджета на форме, изменения макс.и мин. принимающих значений+wrapping я не делал...в чем может быть проблема?

 

Автор: Litkevich Yuriy 17.3.2009, 20:28

Цитата(Andrewshkovskii @ 17.3.2009, 22:15) *
дело в том, что они реагируют на мышкку без фокуса на них
все три?

Автор: Andrewshkovskii 17.3.2009, 20:48

нет, в зависимости от зоны нажатия..блин, это надо показывать в гифке или бинарник могу выслать..в общем зона реагирования Qdial больше, чем нужно..

Автор: Litkevich Yuriy 17.3.2009, 21:44

Цитата(Andrewshkovskii @ 17.3.2009, 23:48) *
это надо показывать в гифке или бинарник могу выслать
ты лучше маленьки й тестовый проект сделай, от биниря толку ни какого

Автор: Andrewshkovskii 18.3.2009, 0:06

небольшой примерчик накатал :

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QWidget>
#include <QDial>
#include <QHBoxLayout>
#include <QPushButton>

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QDial *dial;
    QPushButton *btn;
    QHBoxLayout *layout;

};

#endif // MAINWINDOW_H

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    dial = new QDial;
    layout=new QHBoxLayout;
    btn = new QPushButton;
    layout->addWidget(dial);
    layout->addWidget(btn);
    this->setLayout(layout);
}

MainWindow::~MainWindow()
{

}


#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}


В общем, если фокус(да и без фокуса, если кликнуть там мышкой он на диал ставится) попадает на QDial, то зажиманием и перетаскиванием мышки на таком(линией отчерчена граница реагирования QDial :

Автор: Litkevich Yuriy 18.3.2009, 0:25

ну все нормально, ведь QDial он не круглый, а квадратный как и все виджеты. На основном виджете их всего два, и соответсвенно они занимают вдвоем почти все место, кроме зазоров между виджетами и границами окна

Автор: Andrewshkovskii 18.3.2009, 0:27

Бр, а в моем приложении их вообще 3, 3 кнопочки и 1 QPainter.. тоесть от такого фокуса не избавиться?или поставить какой-нибудь "Жесткий" фокус?
может просто изменить геометрию виджета?хотя он в целом сожмется..

Автор: Litkevich Yuriy 18.3.2009, 0:40

вот тебе переделаный конструктор, для понимания (там виджеты раскрашены):

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    layout=new QHBoxLayout;
    
    dial = new QDial;
    QPalette p1(Qt::lightGray);
    dial->setPalette(p1);
    dial->setAutoFillBackground(true);
    
    btn = new QPushButton;
    QPalette p2(Qt::darkYellow);
    btn->setPalette(p2);
    btn->setAutoFillBackground(true);    
    
    layout->addWidget(dial);
    layout->addWidget(btn);
    this->setLayout(layout);
}
скомпилируй и попробуй в работе

добавлю: и в дизайнере все тоже самое.

Автор: Andrewshkovskii 18.3.2009, 0:42

ух, теперь все ясно стало,спасибо:)Что-нибудь придумаю..а вот проблема в другом, что в дизайнере если такую-же форму генерировать, то такой проблемы нет.
Геометрию виджета надо менять, как я понял..

Автор: Litkevich Yuriy 18.3.2009, 0:46

Цитата(Andrewshkovskii @ 18.3.2009, 3:27) *
может просто изменить геометрию виджета?
можешь жестко задать размеры каждого потенциометра, почему-то его предпочитаемый размер не квадратный, а прямоугольный

Цитата(Andrewshkovskii @ 18.3.2009, 3:42) *
что в дизайнере если такую-же форму генерировать, то такой проблемы нет.
все тоже самое

Автор: Andrewshkovskii 18.3.2009, 0:47

Ну спасибо, завтра разберусь, если жив останусь..заболел :/

Автор: Litkevich Yuriy 18.3.2009, 0:47

ui-файл

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>199</width>
    <height>68</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QHBoxLayout" name="horizontalLayout">
   <item>
    <widget class="QDial" name="dial">
     <property name="palette">
      <palette>
       <active>
        <colorrole role="Base">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>255</red>
           <green>255</green>
           <blue>255</blue>
          </color>
         </brush>
        </colorrole>
        <colorrole role="Window">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>170</red>
           <green>170</green>
           <blue>127</blue>
          </color>
         </brush>
        </colorrole>
       </active>
       <inactive>
        <colorrole role="Base">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>255</red>
           <green>255</green>
           <blue>255</blue>
          </color>
         </brush>
        </colorrole>
        <colorrole role="Window">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>170</red>
           <green>170</green>
           <blue>127</blue>
          </color>
         </brush>
        </colorrole>
       </inactive>
       <disabled>
        <colorrole role="Base">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>170</red>
           <green>170</green>
           <blue>127</blue>
          </color>
         </brush>
        </colorrole>
        <colorrole role="Window">
         <brush brushstyle="SolidPattern">
          <color alpha="255">
           <red>170</red>
           <green>170</green>
           <blue>127</blue>
          </color>
         </brush>
        </colorrole>
       </disabled>
      </palette>
     </property>
     <property name="autoFillBackground">
      <bool>true</bool>
     </property>
    </widget>
   </item>
   <item>
    <widget class="QPushButton" name="pushButton">
     <property name="text">
      <string>PushButton</string>
     </property>
    </widget>
   </item>
  </layout>
</widget>
<resources/>
<connections/>
</ui>



Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)