crossplatform.ru

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

История благодарностей участнику igor_bogomolov ::: Спасибо сказали: 235 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
19.5.2009, 23:13 Удаление временных файлов в Active Directory
Цитата(Kagami @ 19.5.2009, 23:56) *
Умные упсы рулят Они такие сигналы посылать умеют
Кризис в стране однако. Нема упсов. :)


А события консоли можно отлавливать так:
Раскрывающийся текст
#include <QtCore/QCoreApplication>
#include <windows.h>

BOOL CtrlHandler( DWORD fdwCtrlType )
{
  switch( fdwCtrlType )
  {
    // Handle the CTRL-C signal.
    case CTRL_C_EVENT:
      printf( "Ctrl-C event\n\n" );
      Beep( 750, 300 );
      return( TRUE );

    // CTRL-CLOSE: confirm that the user wants to exit.
    case CTRL_CLOSE_EVENT:
      Beep( 600, 200 );
      printf( "Ctrl-Close event\n\n" );
      return( TRUE );

    case CTRL_SHUTDOWN_EVENT:
      Beep( 750, 500 );
      printf( "Ctrl-Shutdown event\n\n" );
      return FALSE;

    default:
      return FALSE;
  }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) )
    {
        printf( "\nThe Control Handler is installed.\n" );
        printf( "\n -- Now try pressing Ctrl+C or Ctrl+Break, or" );
        printf( "\n    try logging off or closing the console...\n" );
        printf( "\n(...waiting in a loop for events...)\n\n" );
    }
    else
        printf( "\nERROR: Could not set control handler");

    return a.exec();
}
SABROG,
12.5.2009, 18:23 Qt и mySQL, непонятки при компиляции самой либы с поддержкой mySQL.
Посмотри вот это описалово. Описано подробнее просто некуда.
Stiff,
11.5.2009, 16:23 Qt и mySQL, непонятки при компиляции самой либы с поддержкой mySQL.
Вот прямая ссылка для скачивания
mingw-utils-0.3.tar.gz
Stiff,
8.5.2009, 12:36 Трабл с QMdiArea
У меня у самого тема не родная под XP стоит. В Qt Designer поведение такое же, как на картинке чуть выше у Maksus-а.
Но в disigner-е встроенном в eclipse и creator все нормально. Вот я и сделал такой вывод, что в этих IDE формы нормально отображаются в независимости от темы в Windows. Еще к этой мысли подтолкнуло то, что отображение форм там несколько отличается, т.е. нет рамок и заголовка окна, соответственно и форму таскать нельзя.
Maksus,
30.4.2009, 2:03 QPaintEvent
Цитата(child_of_bodom @ 30.4.2009, 2:05) *
А можно ли как-то связать объект QDial или QLCDNumber с событием прорисовки окна, чтобы в зависимости от их параметра N рисовалось N квадратиков?
Да без проблем.
Только для начала рекомендую почитать вот это.

Для демонстрации переделал свой предыдущий пример. Код компилируемый.
paint.h
#include <QtGui>

class MyForm : public QFrame
{
    Q_OBJECT
    QRect rect;
    int numRect;

public:
    MyForm(QWidget *parent = 0) : QFrame(parent), numRect(1) {
        setMinimumSize(240,180);
        rect.setSize(QSize(25,25));
    }

protected:
    void paintEvent(QPaintEvent *event) {
        QPainter painter(this);
        painter.setPen(Qt::blue);
        painter.setBrush(QBrush(Qt::red));

        for(int i=0; i!=numRect; i++) {
            rect.moveCenter(QPoint(painter.window().left()+13, painter.window().center().y()) + QPoint(25*i, 0));
            painter.drawRect(rect);
        }

    }

public slots:
    void setNumRect(int num) {
        numRect = num;
        update();
    }
};
main.cpp
#include "paint.h"
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QDialog d;
    MyForm w;

    QDial *dial = new QDial();
    dial->setRange(1, 8);
    QHBoxLayout *hbl = new QHBoxLayout;
    hbl->addWidget(dial);
    hbl->addWidget(&w);
    d.setLayout(hbl);
    QObject::connect(dial, SIGNAL(valueChanged(int)), &w, SLOT(setNumRect(int)));

    d.show();
    return a.exec();
}

child_of_bodom,
29.4.2009, 2:40 QPaintEvent
Накидал элементарный примерчик.
Рисуется квадрат в центре окна. Колесиком мыши изменяются его размеры.
Примерно то что просили. Что непонятно, спрашиваете :)

mypaint.h
#include <QtGui>

class MyForm : public QFrame
{
    Q_OBJECT
    QRect rect;

public:
    MyForm(QWidget *parent = 0) : QFrame(parent) {
        setMinimumSize(240,180);
        rect.setSize(QSize(25,25));
    }

protected:
    // событие перерисовки виджета
    void paintEvent(QPaintEvent *event) {
        QPainter painter(this);
        painter.setPen(Qt::blue);
        painter.setBrush(QBrush(Qt::red));

        // перемещаем наш прямоугорльник в центр данной области рисования
        rect.moveCenter(painter.window().center());
        // отрисовываем наш прямоугольник
        painter.drawRect(rect);
    }

    // событие вращения колесика мышки
    void wheelEvent (QWheelEvent *event) {
        // delta() возвратит +-120, в зависимости от направления вращения колесика мыши
        int step = event->delta() / 6;
        // изменяем размеры нашего прямоугольничка на 2*step
        rect.adjust(-step,-step, step,step);
        // делаем запросс на перерисовку виджета
        update();
    }
};

child_of_bodom,
26.4.2009, 18:02 Как считывать с stdin ?
2 mozgofil. Может лучьше использовать QTextStream

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow W;
    TraceEdit Edit;
    W.show();

    QTextStream in(stdin);
    QString str = in.readLine(1);
    Edit.append(str);

    return App.exec();
}
mozgofil,
26.4.2009, 15:59 Как получить читабельный текст с помощью readAllStandardError()?
Попробуй кодировку IBM 866. Это вроде досовская кодировка которая используется в консоли Windows.


QByteArray ba = pProc->readAllStandardError();
QTextCodec *codec = QTextCodec::codecForName("IBM 866");
QString string = codec->toUnicode(ba);
XXL,
23.4.2009, 13:42 Qt 4.5.1 Qt Creator 1.1
Доступны новые версии Qt
Qt 4.5.1 (список изменений)
Qt Creator 1.1 (список изменений)

Оба релиза доступны в новом Qt SDK. страничка загрузок

Qt Eclipse Integration for C++ 1.5.1
Visual Studio Add-in 1.0.0
Kagami,
21.4.2009, 22:34 Непонятный "вылет" программы.
Вот твоя ошибка. Так делать категорически нельзя. fname у тебя невалиден.
Цитата(NordWest @ 21.4.2009, 23:26) *
char *fname = fitsFileName.toAscii().data();


подробно здесь
NordWest,
21.4.2009, 14:29 Crash при эмитте layoutChanged у QAbstractItemModel
Попробуй сделать такую полседовательность, и именно в таком порядке.
emit layoutAboutToBeChanged();
emit layoutChanged();

Должно помоч. По крайней мере в асистенте сказано, что для подклассов QAbstractItemModel, прежде чем выслать layoutChanged, необходимо выслать layoutAboutToBeChanged
Vass,
19.4.2009, 16:41 QTableWidget+isHiddenColumn
Цитата
void QHeaderView::setSectionHidden ( int logicalIndex, bool hide )
If hide is true the section specified by logicalIndex is hidden; otherwise the section is shown.

Цитата
bool QHeaderView::isSectionHidden ( int logicalIndex ) const
Returns true if the section specified by logicalIndex is explicitly hidden from the user; otherwise returns false.


Подойтет
LE0N,
17.4.2009, 10:38 QTableWidget, Как програмно реализовать перетаскивание?
Цитата(Litkevich Yuriy @ 17.4.2009, 10:40) *
QTableWidget, предназанчен для довольно примитивных операций над ним. Поэтому он сам удаляет свои элементы
Вставка виджета происходит на уровне QAbstractItemView методом setIndexWidget. При этом, данный метод не является виртуальным, и переопределить его не получится.

На мой взгляд имеем недоработку(а возможно и баг), т.к. не происходит проверки вставляемого виджета с предыдущим. Предыдущий виджет просто удаляется. Видимо так сделанно из-за того, что копирование виджетов запрещено. Хотя, на мой взгляд, они должны были предусмотреть такую возможность, что бы защититься от лишних ошибок, в результаве повторного вставления одного и того же виджета в ячейку. Это с одной стороны ошибка программиста, но и недоработка библиотеки, в крайнем случае описания данного метода.

Так что можно и отрапортовать о баге, посмотрим что ответят. Как считаете, стОит?

ИМХО.
Danila_Bagrofff,
14.4.2009, 0:18 Темы которые нужно затронуть в QT FAQ
Чем не темы для FAQ? Краткие, понятные, немного нестандартные.
раз
два
ViGOur,
12.4.2009, 23:18 QComboBox
Да готовое решение уже есть. Ну почти готовое :rolleyes:
Из QTDIR\examples\itemviews\coloreditorfactory\ выдергивфете класс ColorListEditor
заменяете все Qt::DecorationRole на Qt::BackgroundRole
и в методе populateList() строку insertItem(i, colorNames[i]) на insertItem(i, "")

Это самое быстрое решение проблемы которое я могу предложить. Будет все то же самое, за исключением рамки вокруг цвета.
Это принципиальный вопрос?
whyt,
10.4.2009, 22:50 Виджет-контейнер
Цитата(fantom @ 10.4.2009, 17:21) *
Как технически клонировать виджет который содержит внутри себя другие объекты.
Цитата(fantom @ 10.4.2009, 16:45) *
Работа с ним будет происходить примерно следующим образом: в дизайнере мы переносим мышкой необходимый виджет на виджет-контейнер


Отклонусь немного от темы (а мож и не отклонюсь :) ).
По двум недавным обсуждения по поводу динамического создания форм (раз два) родилась следущая мысль. Не знаю на сколько хорошая, но право на жизнь имеющая. (Меня покрайней мере было интересно это реализовать).
Итак, вопросс
Цитата(fantom @ 10.4.2009, 17:21) *
Как технически клонировать виджет который содержит внутри себя другие объекты.

Сразу хочу оговориться, с XML опыта работы очень мало, так что если есть способ сократить код или сделать более изящно, сделайте это. Мне прошу не пинать :)
И еще, метод domxmlToString был позаимствован у xintrea здесь (ссылка)

Итак, изначально форма, виджет-контейнер и все что в нем, создается в дисигнере. Т.е. мы имее ui файл.
шаг №1
 // читаем содержимое ui файла
QDomDocument doc("mydocument");
QFile file("../form/oscilloscope.ui");
if (!file.open(QIODevice::ReadOnly))
     return 0;
if (!doc.setContent(&file)) {
     file.close();
     return 0;
}
file.close();

// отыскиваем в нем наш виджет контейнер по имени (в моем случае это voltdivgroupBox)
QDomNodeList nodelist = doc.elementsByTagName( "widget" );
QDomElement elem; // здесь будет сохранен нужный нам узел
qDebug() << nodelist.count();
for (int i =0; i != nodelist.count(); i++) {
     elem = nodelist.item(i).toElement();
     if(elem.attribute("name") == "voltdivgroupBox")
         break;
}

шаг №2
// Преабразуем наш узел в QByteArray
QByteArray xmlstr = domxmlToString(elem).toUtf8();
// А теперь эмитируем XML файл (а если точнее .ui)
xmlstr.prepend("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
           "<ui version=\"4.0\">");
xmlstr.append("</ui>");

шаг №3 (заключительный)
// Загружае наш виджет-контейне(или если хотите клонируем) посредством QUiLoader 
    QUiLoader loader;
    QBuffer buffer(&xmlstr);
    buffer.open(QIODevice::ReadOnly|QIODevice::Text);
    QWidget *myWidget = loader.load(&buffer); // это клон нашего виджета-контейнера со всеми расположенными в нем элементами и с сохраннеными свойствами
    buffer.close();
    myWidget->show();

приложение. Описание метода domxmlToString
QString domxmlToString(QDomNode xmldata)
{
     if(xmldata.isDocument()) {
         return xmldata.toDocument().toString();
     }
     else {
         QString xmlcode;
         QTextStream stream(&xmlcode, QIODevice::WriteOnly);
         xmldata.save(stream, 1);
         return xmlcode;
     }
}

Вот что получилось у меня(см. прикрепленные рисунки). Как видете я создал два клона части своего приложения, Все свойства при этом сохранены, в том числе и ресурсы.

Ух. Я в тему надеюсь :rolleyes:?
Даже если не совсем, хвалим меня, я старался :rolleyes:
fantom, freestyler2,
8.4.2009, 11:26 Неактивные кнопки меню
Цитата(Litkevich Yuriy @ 8.4.2009, 12:00) *
надо с остальным кодом разбираться

Да нету никакого другого кода. Есть чистый проект. В disigner создан QMainWindow и меню. Есть файл ui. Форма из ui файла динамически загружается, как описано выше. Вот и весь код. :rolleyes:

Цитата(Litkevich Yuriy @ 8.4.2009, 12:03) *
а ты можешь простейший компилируемы проект сделать (минимальных рамеров), в котором такое поведение проявляется. И выложить сюда?

Впринципе и я могу. Выложить?

Вот тестовый проект. Если поменять QWidget на QDialog все станет нормально.
Litkevich Yuriy,
8.4.2009, 10:23 Неактивные кнопки меню
Разобрался. :yahoo:
Если конечно я все провельно понял. newNameDlg это же диалоговае окно, я правильно понимаю, а не виджет на форме MainWindow?
Поэтому данный класс должен наследоваться от QDialog, а не от QWidget.
Конструктор класса я упростил до
newNameDlg::newNameDlg(QWidget *parent)
    : QDialog(parent)
{
    QUiLoader loader;
    QFile file("D:/WorkProject/Qt_Project/Oscilloscope/newNameDlg.ui");
    if (file.open(QFile::ReadOnly)) {
        formWidget = loader.load(&file, this);
        file.close();

        ui_newNameLine = qFindChild<QLineEdit*>(this, "nameIns");

        QMetaObject::connectSlotsByName(this);
        formWidget->show();
    }
}
У меня таким образом все заработало нормально. До модификаций возникала та же самая проблема.
И еще. formWidget->show() можно и не делать раз вы его сразу скрываете после создания класса.

P.S. Взаимодействие сигнал-слот не проверял.
NordWest,
6.4.2009, 11:15 QComboBox
Чего не встречали - наследования или фильтров событий :rolleyes:
Если фильтры, то смотрите void QObject::installEventFilter ( QObject * filterObj )
Будет примерно так:
Раскрывающийся текст
         bool QMainForm::eventFilter(QObject *obj, QEvent *event)
         {
             if (event->type() == QEvent::MouseButtonPress && obj == comboBox) {
                 QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
                 // ваши действия и имитация сигнала
                 return true;
             } else {
                 return QObject::eventFilter(obj, event);
             }
         }

Если то что я предлогал. То необходимо наследоваться от QComboBox, и переопределять метод showPopup (). В этом случае придется создовать свою модель popup. Впринципе это не сложно. Читайте, эксперементируейте. Что непонятно пишите, разберемся :rolleyes:
whyt,
6.4.2009, 1:39 QComboBox
Как вариант.
Смотри void QComboBox::showPopup () [virtual]
Наследуешся, переопределяешь этот метод, и высылаешь в нем свой сигнал.
whyt,
5.4.2009, 2:21 дизайнер глючит qt 4.5.0.0
Установите стандартную тему в XP и будет счастье.
Самопальные темы в XP Qt не поддерживает.
ninguem,
31.3.2009, 15:03 QDate....
Не знаю, что вы имеете ввиду под химией.
    QDate date = QDate::fromString(str, "dd.MM.yy"); \\ здесь действительно 31 марта 1909 года
    date = QDate::fromString(date.toString("dd.MM.'20'yy"), "dd.MM.yyyy"); \\ а вот здесь уже 31 марта 2009. Не строка, а именно дата.


Такой вот финт ушами. Чем он не устраивает? Небольшим преобразованием получаем то что хотим, икономя при этом место :rolleyes:
LE0N,
30.3.2009, 12:03 Определение цвета фона виджета
const QPalette & palette () cons
А там уже в зависимости от роли и группы можно узнать цвет

Например
    QPalette palette = centralWidget->palette();
    qDebug() << palette.color(QPalette::Background);
AD,
28.3.2009, 0:47 QTableWidget
1. Конечно реально.
Цитата
void resizeSection ( int logicalIndex, int size );
void setResizeMode ( int logicalIndex, ResizeMode mode )

// задаем ширину столбцов
tableWidget->horizontalHeader()->resizeSection(0, 100);
tableWidget->horizontalHeader()->resizeSection(2, 100);
// фиксируем их размер
tableWidget->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);
// центральный столбей делаем "растягивающимся"
tableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);


2. Функции, чтобы поменять цвет нужной строки нет (по крайней мере я такой не знаю).
Можно сделать через делегат, переопредилив метод paint(). Либо, как и предпологали, менять цвет в каждом итеме.
canavar,
27.3.2009, 15:47 Xml - обращение к дочернему элементу
копируем куда-нибудь проект QTDIR/examples/xml/dombookmarks
В файле xbeltree.cpp ищем функцию bool XbelTree::read(QIODevice *device)
Что бы не мучаться, заменяем весь ее код, на следущий:
Раскрывающийся текст
bool XbelTree::read(QIODevice *device)
{
    QString errorStr;
    int errorLine;
    int errorColumn;

    if (!domDocument.setContent(device, true, &errorStr, &errorLine,
                                &errorColumn)) {
        QMessageBox::information(window(), tr("DOM Bookmarks"),
                                 tr("Parse error at line %1, column %2:\n%3")
                                 .arg(errorLine)
                                 .arg(errorColumn)
                                 .arg(errorStr));
        return false;
    }

    QDomElement docElem;
    QDomNodeList lstNodes(domDocument.elementsByTagName("page"));
        for (int n=0; n<lstNodes.count(); n++)
        {
            QDomElement childElem = lstNodes.at(n).toElement();
            if (childElem.attribute("id") == "page01")
            {
                QDomElement child = childElem.lastChild().toElement();
                qDebug() << child.text();
            }
        }

    return true;
}



Рядом с exe-шником кладем ваш файл
Раскрывающийся текст
<?xml version="1.0" encoding="UTF-8"?>
<help>
    <page id = "page01">
        <title>title of page01</title>
        <message>text1</message>
    </page>
    <page id = "page99">
        <title>title of page99</title>
        <message>text2</message>
    </page>
</help>


Компилируем, смотрим что выводит qDebug();
Не забываем отписаться о результатах.

P.S. У меня все выше описанное прекрасно работает.
FladeX,

9 страниц V  « < 6 7 8 9 >
RSS Текстовая версия Сейчас: 5.3.2021, 12:54