crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику wiz29 ::: Спасибо сказали: 94 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
2.3.2012, 9:56 Здравствуйте! Скажите, пожалуйста, как сделать так, чтобы когда нажимаешь на кнопку появилось диалоговое окно?
/*main.cpp*/
#include <QApplication>
#include <QPushButton>
#include <QDialog>

int main(int argc, char* argv[])
{    
    QApplication app(argc, argv);

    QPushButton btn("OK");
    QDialog dlg;
    btn.show();
    QObject::connect(&btn, SIGNAL(clicked()), &dlg, SLOT(exec()));
  
    return app.exec();
}
Steklova Olga,
10.2.2012, 17:49 Ошибка открытия файла
что за файл, который ты пытаешься открыть?
ruzik,
10.2.2012, 16:54 QValidator + QLineEdit
Цитата(861401 @ 10.2.2012, 14:51) *
мне посоветовали такое решенние
class ValidatableLineEdit : public QLineEdit
{
public:
    ValidatableLineEdit(QWidget *parent = 0) : QLineEdit(parent)
    {
        setValidator(new QDoubleValidator(-999.0, 999.0, 2, this));
    }
};

"Теперь в коде нужно создавать объекты типа ValidatableLineEdit вместо QLineEdit, а в дизайнере надо преобразовать существующие лайнэдиты в этот новый класс (правой кнопкной на лайнэдит - promote to/преобразовать в)"
Спасибо всем отписавшимся :)

Это корявое решение. QDoubleSpinBox можно добавить в дизайнере.
861401,
10.2.2012, 16:51 Ошибка с appendChild
Цитата(ruzik @ 10.2.2012, 16:48) *
Вот нужный код:
void RizekFaster::saveNode(const QDomNode& node, QModelIndex& index)
{
    for (int a=0;a<itemModel->rowCount(index);a++)
    {
        //If it is folder
        if(itemModel->item(a,0)->hasChildren())
        {
            QDomElement folder;
            folder.setAttribute("name",node.toElement().text());
            node.appendChild(folder);//ПОПЫТКА МОДИФИЦИРОВАТЬ КОНСТАНТНЫЙ ОБЪЕКТ НЕ КОНСТАНТНЫМ МЕТОДОМ

            QModelIndex newIndex = itemModel->index(a,0,index);
            saveNode(folder,newIndex);
        }
        //If it is item
        //if(!itemModel->item(a,0)->hasChildren())
        else
        {
            QDomElement item;
            item.setNodeValue(node.toElement().text());
            node.appendChild(item);//ПОПЫТКА МОДИФИЦИРОВАТЬ КОНСТАНТНЫЙ ОБЪЕКТ НЕ КОНСТАНТНЫМ МЕТОДОМ
        }
    }
}

Да, но если я не ошибаюсь, то все наоборот: я отправляю неконстантный объект, который преобразуется в функции в константную ссылку, что вроде как норма



передавай не "const QDomNode& node" а "QDomNode& node"
функция должна выглядеть так:
void RizekFaster::saveNode(QDomNode& node, QModelIndex& index)
{
....
}
ruzik,
10.2.2012, 9:33 QValidator + QLineEdit
а чем не устраивает QDoubleSpinBox с флагом QAbstractSpinBox::NoButtons?
861401,
9.2.2012, 10:20 Быстрый переход в QTreeView
QApplication::keyboardInputInterval()

а функция, которую ты имеешь виду:void QAbstractItemView::keyboardSearch ( const QString & search ) [virtual]
good_game,
6.2.2012, 16:28 как создать шкалу-градиент
Можно нарисовать средствами QPainter, используя кисть с установленным в нее QLinearGradient, для закраски прямоугольной области.
menand,
1.2.2012, 8:10 Стереть фрагмент QPixmap
установи рисовальщику QPainter::CompositionMode_Source и рисуй заливку QColor(0, 0, 0, 0) должно помочь.
Norrius,
24.1.2012, 15:05 QImage и QPainter
попробуй заменить у себя эти строки.
QImage image(pix1.width()+pix2.width(),pix2.height(),QImage::Format_ARGB32); // _Premultiplied не помог
image.fill(0);
mainPix = QPixmap::fromImage(image, Qt::NoOpaqueDetection | Qt::AutoColor);
RazrFalcon,
27.12.2011, 13:59 Попиксельное заполнение буфера
Цитата(loh @ 27.12.2011, 14:35) *
а как попиксельно заполнять pixmap, так же быстро как image, типа bits or scanline функций?

Для Qpixmap нет возможности работать попиксельно, тк это устройство-зависимый формат.
Как вариант, используй QImage для недостающих частей картинки и затем рисуй эти куски через QPainter в QPixmap
loh,
27.12.2011, 13:53 QT таймер и comboBox
тогда как раз понадобится дополнительный рабочий поток, в котором бы отменялась текущая задача, если она не успела выполнится в заданный срок до прихода новых данных.
PVGDRK,
27.12.2011, 12:13 HexSpinBox из примера в книге Бланшет
Везде делают по-разному, все зависит от стиля информирования об ошибках в приложении.
Например в Adobe Photoshop появляются диалоги с допустимыми диапазонами по завершению ввода в спин бокс, в котором пользователю сообщается допустимый интервал и введенное значение корректируется к ближайшей границе этого интервала. В других приложениях могут выводится сообщения о недопустимости интервалов в момент нажатия на кнопку применить, все зависит от принятой стратегии в вашем приложении. Ведь можно просто "повесить" валидатор, основываясь на значении в поле ввода "min" или "max" (в зависимости от того куда вводим), не давая возможности пользователю ввести недопустимое значение...
Steklova Olga,
27.12.2011, 11:50 QT таймер и comboBox
Цитата(PVGDRK @ 27.12.2011, 12:18) *
в ComboBox я вывожу так
QStringList list;
list<<" текст";
ui.comboBox->addItems(list);
если текст написан русскими буквами то выводится не пойми что


подход неверный
Все зависит от кодировок вашего исходного текста, "текст" - интерпретируется как char[] а не как юникод,
для того чтоб нормально выводилось надо использовать нечто вроде
QStringList list;
list<<QString::fromLocal8Bit("текст");
ui.comboBox->addItems(list);


но еще раз повторю, все зависит от того в какой кодировке представлены ваши исходники.

Цитата(PVGDRK @ 27.12.2011, 12:18) *
Про таймер - я правильно понимаю, что таймер можно запускать в основном потоке а событие таймера уже выполнять в другом? пока будут обрабатываться события таймера в том потоке таймер будет снова отсчитывать заданные промежутки ? и как будет выполняться обработка наступившего события?


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

Цитата(PVGDRK @ 27.12.2011, 12:18) *
Если таймер запустить в основном потоке то через определенное время наступает timerEvent(QTimerEvent*) и если в при заходе в него сделать killTimer а потом сразу startTimer почему таймер не заходит снова в timerEvent(QTimerEvent*) ?


int QObject::startTimer ( int interval )
Starts a timer and returns a timer identifier, or returns zero if it could not start a timer.
Вы уверены что у вас создается таймер?

если нужно отмерять интервалы однократно, то лучше использовать
QTimer::singleShot()
PVGDRK,
27.12.2011, 8:42 index в tableview
Цитата(sib @ 27.12.2011, 9:13) *
Здраствуйте. Прошу помощи в решениии проблемы. Немогу определить номер выделенной строки в tableview.

Если нужно именно строки то смотри примерно так (данный метод актуален, когда выбрана именно строка целиком)
QAbstractItemView* pView = getTableView();//это пример, не следует понимать буквально:)
QItemSelectionModel* pSelModel = pView->selectionModel();
QModelIndexList selectedRows = pSelModel->selectedRows();

Если интересует строка для текущей выделенной ячейки, то примерно так:
QAbstractItemView* pView = getTableView();
QModelIndex cellId = pView->currentIndex();
int rowNumber = cellId.row();
sib,
26.12.2011, 8:47 QTableWidget отслеживание изменений
Цитата
QStandardItem *item = new QStandardItem();
item->setData("текст", Qt::DisplayRole);
column1.append(item);
item->setData("текст2", Qt::DisplayRole);
column1.append(item);


Добавляешь один и тот же итем 2 раза, естественно что 2й строки тут не будет...
....
QStandartItemModel* pSomeModel = new QStandartItemModel(...);
QStandardItem *item = new QStandardItem();
item->setData("текст", Qt::DisplayRole);
pSomeModel->appendRow(item);
item = new QStandardItem();
item->setData("текст2", Qt::DisplayRole);
pSomeModel->appendRow(item);
....

Петр91,
13.12.2011, 13:32 Полилиния
используй QPainterPathStroker для задания shape
aster_x, KontAr,
9.12.2011, 10:35 как убрать интервал между первым и последующими KeyPressEvent
QKeyEvent::isAutoRepeat () когда возвращает истину игнорь данное событие
efg,
17.11.2011, 8:52 QImage Яркость и контрастность
я бы не мучился, если картинки небольшие то можно сделать так
//QImage img; some input image with resulution (w, h)
//int lightness; 0 - 0 %; 255 - 100%
void setImageLightness(QImage& img, int lightness)
{
    int w = img.width();
    int h = img.height();
    for (int y = 0; y < h; ++y)
    {
        for(int x = 0; x < w; ++x)
        {
            QColor pixel = image.pixel(x, y);
            pixel.setHsl(pixel.hue(), pixel.saturation(), lightness, pixel.alpha());
            image.setPixel(x, y, pixel.rgba());
        }
    }
}

для контраста аналогично.
код не пробовал собирать, но думаю должно работать.

только не забывай, что картинка хранится не в hsl пространстве, и если ты хочешь интерактивно обрабатывать ее, то должен держать оригинал который хочешь обрабатывать отдельно и на каждой итерации применять метод к копии данной картинки с новым параметром иначе результат не будет удовлетворять твоим ожиданиям.:)
Nof1000,
15.11.2011, 19:43 Откуда мусор на экране?
ваш баг очень похож на этот

у меня версия библиотеки 4.7.3 поэтому возможно его я и не вижу, тк он закрыт версией 4.7.2

осталось тока проверить сборку с библиотекой Qt 4.7.2 или выше
Steklova Olga,
14.11.2011, 12:58 QGraphicsRectItem с текстом
вопрос не совсем понятен. возможно лучше просто использовать QGraphicsTextItem вместо QGraphicsRectItem.

в любом случае без преобразования к конкретному типу не получится ничего сделать в QGraphicsItem нет методов по установки текста.
barabaka,
11.11.2011, 16:36 оптимизация при использовании одинаковых QGraphicsItem'ов
Цитата(efg @ 10.11.2011, 2:50) *
дело в том, что на сцене должно быть одновременно размещено много (скажем, около 1000, хотя в перспективе их будет гораздо больше) item'ов - Svg или Pixmap, не важно. каждый из них довольно маленького размера (20х20), и изображение для них выбирается случайным образом из 6 различных файлов. получается так, что каждый элемент загружает изображение для себя, что, естественно, очень затратно при таком их количестве. можно ли как-нибудь оптимизировать всё это дело, чтобы каждый item не хранил в себе изображение, а содержал указатель? или придётся писать свой класс? кто-нибудь сталкивался с подобным?

можно использовать pixmap кэш
efg,
9.11.2011, 12:35 Определение кода для кнопок / и *
Qt::Key_Asterisk - for multiply
Qt::Key_Slash - for divide
но на 100% не уверен, надо проверять. (это если говорить о доп клавиатуре)
AD,
8.11.2011, 16:47 QTableWidget и прогресс в ячейке. Как? smartchecker,
31.10.2011, 14:28 Qpainter+Qpixmap вопросы
Margin это отступы при отображении?
Если это так то ты должен приводить rubberBandRect к координатам картинки
для этого нужно rubberBandRect.translate(-Margin, -Margin);

void WidImage::drawImage(QPainter *painter)
{
    if(!rubberBandIsShown)
    {
        pixmap = pixmap.copy(rubberBandRect.translated(-Margin, -Margin));
        painter->drawPixmap(Margin, Margin, pixmap);
    }
    else
    {
        painter->drawPixmap(Margin, Margin, pixmap);
    }
}
denmor86,
31.10.2011, 14:10 Как в Qt designerе создать растягивающиеся элементы окна?
Цитата(dimamix @ 31.10.2011, 12:54) *
Добрый день.
Продолжаю писать плагин на питоне для Qgis.
В качестве gui используется QT, окна создаю в Qt designer.
Уперся в то, что не понимаю как сделать элементы окна растягивающимися пропорционально окну.
Собрал элементы в Layout, в Qt designer-е меняются, при растягивании Layout, а в приложении при изменении окна - нет.
Подскажите как связать с окном?

зы
на С читаю, со словарем :)

Выбери сам виджет, на который добавлял все контролы и добавь ему Layout in a grid все заработает.
dimamix,

4 страниц V  < 1 2 3 4 >
RSS Текстовая версия Сейчас: 29.3.2024, 10:07