Просмотр сообщений
|
Страниц: 1 ... 5 6 [7]
|
91
|
Qt / Пользовательский интерфейс (GUI) / Re: экспоненциальный QDoubleSpinBox
|
: Май 26, 2015, 12:18
|
У меня проблем "накидать" нет, есть проблемы со временем для таких незапланированных мелочей Это ни хрена не мелочь для весьма востребованной компоненты. Я поговорил с нашими инженерами на работе и они то же хотели бы использовать такую возможность для ряда случаев. Мне лично QScienceSpinBox доверия не внушает, слишком много возни с ручным разбором текста. Надо отметить, что разбор текста и добрая половина QScienceSpinBox скопирована из исходников Qt4.2 Делайте по образцу того что предложил poru вставляя проверенное Не советую. В предложенном мною варианте, накиданном на скорую руку, не работает валидатор и есть ошибка округления. Но для... Пусть даже не идеальный, без наворотов, пока заткнуть, потом можно будет доделать вполне сойдет. Ошибку округления я уже знаю как исправить, но заставить работать валидатор так и не получилось. Есть мнение, что для реализации новых возможностей лучше всего написать по новой DoubleSpinBox наследуясь от QAbstractSpinBox.
|
|
|
93
|
Qt / Пользовательский интерфейс (GUI) / Re: экспоненциальный QDoubleSpinBox
|
: Май 21, 2015, 09:30
|
Накидал вот такой вариант... C++ (Qt) #include <QDoubleSpinBox> #include <QDoubleValidator> class ScientificDoubleDpinBox : public QDoubleSpinBox { Q_OBJECT public: explicit ScientificDoubleDpinBox(QWidget *parent = 0); void setMaximum(double max); void setMinimum(double min); void setDecimals(int prec); QValidator::State validate(QString &input, int &pos) const; double valueFromText(const QString &text) const; QString textFromValue(double val) const; void fixup(QString &str) const; private: QDoubleValidator *m_validator; };
C++ (Qt) #include <QLineEdit> #include "scientificdoubledpinbox.h" ScientificDoubleDpinBox::ScientificDoubleDpinBox(QWidget *parent) : QDoubleSpinBox(parent) { m_validator = new QDoubleValidator(this); m_validator->setNotation(QDoubleValidator::ScientificNotation); } void ScientificDoubleDpinBox::setMaximum(double max) { m_validator->setTop(max); QDoubleSpinBox::setMaximum(max); } void ScientificDoubleDpinBox::setMinimum(double min) { m_validator->setBottom(min); QDoubleSpinBox::setMinimum(min); } void ScientificDoubleDpinBox::setDecimals(int prec) { m_validator->setDecimals(prec); QDoubleSpinBox::setDecimals(prec); } QValidator::State ScientificDoubleDpinBox::validate(QString &input, int &pos) const { return m_validator->validate(input, pos); } double ScientificDoubleDpinBox::valueFromText(const QString &text) const { return text.toDouble(); } QString ScientificDoubleDpinBox::textFromValue(double val) const { return QString::number(val, 'e', decimals()); } void ScientificDoubleDpinBox::fixup(QString &str) const { return m_validator->fixup(str); }
C++ (Qt) MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ScientificDoubleDpinBox *sciDoubleSpinBox = new ScientificDoubleDpinBox(this); sciDoubleSpinBox->setMaximum(999999999.999999999); sciDoubleSpinBox->setMinimum(0.0); sciDoubleSpinBox->setDecimals(2); ui->verticalLayout->addWidget(sciDoubleSpinBox); }
Dpin
|
|
|
94
|
Qt / Пользовательский интерфейс (GUI) / Re: QToolBar stylesheet
|
: Май 13, 2015, 12:34
|
Для данного случая нужно перечислить несколько состояний, но ключевым является - "border: none": C++ (Qt) ui->mainToolBar->setStyleSheet( "QToolBar {" "background-color: qlineargradient(spread:pad, x1:1, y1:0.455686, x2:1, y2:1, stop:0 rgba(127, 127, 127, 255), stop:1 rgba(96, 96, 96, 255));" "color:rgb(255, 255, 255);" "}" "QToolButton { " "border: none;" "padding: 5;" "}" "QToolButton:hover { " "background-color: white;" "}" "QToolButton:checked:pressed { " "background-color: white;" "}" "QToolButton:pressed { " "background-color: red;" "}" "QToolButton:checked { " "background-color: red;" "}" );
|
|
|
95
|
Qt / Пользовательский интерфейс (GUI) / Re: QInputDialog - дополнительный виджет
|
: Февраль 13, 2015, 14:57
|
Igors прав, написать данный функционал дело десяти минут... Bepec, читай еще раз: Всю эту "херь" я уже реализовал... Ну а почему кто-то за Вас должен переправлять? Заходите в баг тракер и постите Да я бы с удовольствием, но у меня нет практики с "инглишом", поэтому и прошу кого-то. А ведь дело-то всего в том, что бы layout был доступен после конструктора.
|
|
|
96
|
Qt / Пользовательский интерфейс (GUI) / Re: QInputDialog - дополнительный виджет
|
: Февраль 13, 2015, 11:36
|
Ну а как же прынцыпы? Инкапсуляция, наследование и все такое Браво! Поддерживаю! Вы уже так делали - зачем спрашивать? Во-первых: я ни о чем не спрашивал, а дал конкретное утверждение, что код не рабочий. Во-вторых: если представляешь исходный код, то не допускай ошибок, иначе тебя не правильно поймут. Береги свой статус. И еще: может ли кто-либо вопрос по дополнительному "виджету" переправить разработчикам? Описание проблемы: программа разработана для обычного "виндовоза", но потребитель у себя установил на стену компьютер с сенсорным экраном, т.е. нет "мыши" и "клавы", при этом программа, разработанная в Qt, не распознает присутствие сенсорного экрана, и потребитель хочет, что бы наиболее частые параметры вводились дополнительным выбором именно через дополнительный "виджет", расположенный между строкой ввода и кнопками "OK" и "Отмена", и именно в QInputDialog, при этом, когда мы с ним (потребителем) общались "виртуальная клава" ему "на хер" не нужна. Таким образом потребитель хочет что бы при вводе целых чисел была только цифровая панелька, а при вводе вещественных - панелька дополнялась точкой и т.д и т.п. Всю эту "херь" я уже реализовал, но еще раз повторюсь - отправьте, пожалуйста, запрос "разрабам", что бы дали нормальный доступ к layout'у и строке ввода.
|
|
|
98
|
Qt / Пользовательский интерфейс (GUI) / Re: QInputDialog - дополнительный виджет
|
: Февраль 11, 2015, 09:02
|
Я все же добрался до layout'а ... через одно место C++ (Qt) QInputDialog *inputDialog = new QInputDialog(this); qDebug() << "a:" << inputDialog->layout(); QString labelText = inputDialog->labelText(); qDebug() << "b:" << inputDialog->layout(); QVBoxLayout *layout = static_cast<QVBoxLayout *>(inputDialog->layout()); layout->insertWidget(1, new QPushButton("1", this)); inputDialog->exec();
|
|
|
103
|
Qt / Общие вопросы / Re: ссылки\указатели
|
: Ноябрь 24, 2014, 11:13
|
Разработчики рекомендуют экземпляры классов, наследованные от QObject передавать по указателю. Иначе, в ряде случаев, ваше приложение потерпит крах. Таким образом остальные объекты, которые не наследованы от QObject, лучше всего передавать по классической схеме в виде ссылок, для обеспечения лучшей оптимизации кода компилятором.
|
|
|
|
|